Amazon MWAAのローカル環境を簡単構築!aws-mwaa-local-runnerのススメ
こんにちは。サービスグループの武田です。
AWSは多くのマネージドサービスを提供していますが、ではそれを利用する場合の開発環境をどうしようかという課題があります。動作確認は常にAWSで行えばよいという考え方もあります。一方で、たとえばDynamoDBであればDynamoDB Localを使うなどローカルで実行可能な環境を作れる場合もあります。
AWSではAmazon Managed Workflows for Apache Airflow(MWAA)という、Airflowのマネージドサービスを提供しています。今回はMWAAのローカル環境についてです。名前からも分かるとおり中身はApache Airflowですので、単にAirflowの環境をローカルに構築するだけのようにも思えます。ではMWAAのPythonバージョンはいくつでしょうか?依存ライブラリはどうでしょう?それらを一発で解決してくれるのが、今回紹介するaws-mwaa-local-runnerです。
aws-mwaa-local-runnerとは
aws-mwaa-local-runnerはいくつかのコマンドを使用することで、簡単にMWAAと同じ環境をローカルに構築できるユーティリティです。内部的にDockerを利用しているため、事前にDockerのインストールが必要です。今回はmacOSで動かしますが、Windowsなどでも利用可能です。
aws-mwaa-local-runnerの使い方
使い方はREADMEに書いてありますので、そちらも参考にしてください。基本的な使い方をなぞってみます。
$ git clone https://github.com/aws/aws-mwaa-local-runner.git $ cd aws-mwaa-local-runner $ ./mwaa-local-env build-image $ ./mwaa-local-env start
なんとこれだけでAirflowの環境が立ち上がります。管理画面http://localhost:8080/home
にアクセスすると次のような画面が表示されます。認証はユーザー名admin
、パスワードtest
で可能です。
ちなみにMWAAのAirflowバージョンは、現在1.10.12
と2.0.2
を提供していますが、リポジトリのmastarは執筆時点では2.0.2
に対応しています。任意のバージョンを指定したい場合、tagが振ってあるため切り替えることで対応可能です。
停止は、./mwaa-local-env start
がフォアグラウンドで動いているため、Ctrl-C
でプロセスを停止します。
dags/
がDAGを格納するディレクトとなっているため、ここに作成したDAGファイルを置くことでAirflowに認識されます。またdags/requirements.txt
に追加したいライブラリを追記することで、コンテナ起動時に自動的にインストールしてくれます。
DAGを追加してみよう
それでは簡単なDAGを追加してみましょう。以前も使ったことのある次のようなDAGファイルを追加します。
import urllib.request import airflow from airflow.models import DAG from airflow.operators.python import task from bs4 import BeautifulSoup args = { "owner": "airflow", "start_date": airflow.utils.dates.days_ago(2), "provide_context": True, } @task def get_devio_top_page(url): return urllib.request.urlopen(url).read().decode("utf-8") @task def print_title(html): soup = BeautifulSoup(html, "html.parser") print(soup.find("title")) with DAG( dag_id="scraping_test", default_args=args, schedule_interval=None, ) as dag: page = get_devio_top_page(url="https://dev.classmethod.jp/") print_title(html=page)
追加のライブラリとしてBeautifulSoup
を使用しているため、requirements.txt
を修正します。
beautifulsoup4==4.9.3
ライブラリはコンテナ起動時にインストールされるため、一度local-runnerを停止して再起動します。再起動時のログを確認するとbeautifulsoup4をインストールしていることが確認できるはずです。
管理画面を更新するとDAGが追加されています。
有効にして実行してみます。
ログを確認すると結果が出力されています。問題なさそうですね。
[2021-06-17 04:52:41,800] {{logging_mixin.py:104}} INFO - <title>クラスメソッド発「やってみた」系技術メディア | DevelopersIO</title>
まとめ
MWAAを採用するにあたって、ローカルの環境をどうしようか考えていたところaws-mwaa-local-runner
を見つけました。簡単に使用開始できとても便利ですね。皆さんもぜひ使ってみてください!